/*
 * @Author: HZK
 * @Date: 2020-08-24 15:46:04
 * @LastEditTime: 2020-08-24 18:39:41
 * @LastEditors: hanfengmi
 * @Description: 函子
 */
class Container {
    static of (value) {
        return new Container(value)
    }

    constructor(value) {
        this._value = value
    }

    map(fn) {
        return Container.of(fn(this._value))
    }
}

class Maybe {
    static of (x) {
        return new Maybe(x)
    }

    isNothing() {
        return this._value === null || this._value === undefined
    }
    
    constructor(x) {
        this._value = x
    }

    map(fn) {
        console.log('fn', fn(this._value))
        console.log('fn-this.isNothing', this.isNothing())

        return this.isNothing()? this: Maybe.of(fn(this._value))
    }
}

module.exports = {Maybe, Container}